import os.path
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

SECRET_KEY = 'django-insecure-58m3x4^m_*voa29iv(^3^1!j2t=63!dv8a%5&l!r)fz$x2ozl)'

STATIC_URL = 'static/'


# 本地设置内容 ##########################################
# DEBUG = True       # 本地调试模式
# ALLOWED_HOSTS = []  # 本地不用这个也可以的
# STATICFILES_DIRS = [BASE_DIR / "static"]  # 以后就不用在html里{% load static %}了，后边有配了，这里不用了
# SOCKETIO_SERVER_URL = 'localhost:8000'    # 本地websocket:(ws:有后边去拼接)
# ####################################################

# 上线后模式 ###########################################
DEBUG = False    # 调试模式禁用
STATIC_ROOT = os.path.join(BASE_DIR, 'static')  # 导出静态文件，把STATICFILES_DIRS注释掉
SOCKETIO_SERVER_URL = 'www.zyz2004.cn'    # 上线后websocket:(wss:由后边去拼接) www.zyz2004.cn:8000,139.155.127.236:8000 在HTTPS环境下必须使用wss://协议，而非ws://
ALLOWED_HOSTS = ["www.zyz2004.cn"]   # 允许访问的域名
CSRF_TRUSTED_ORIGINS = ['https://www.zyz2004.cn']  # 必须包含https头，是否允许POST/PUT/DELETE 等请求来自哪些域名
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")   # 识别代理协议，部署Nginx时用到
# ##########################################

# 临时关闭 CSRF 验证（仅测试用）
# CSRF_COOKIE_SECURE = False      # 默认值False：控制浏览器是否仅在 HTTPS 连接中发送 CSRF Cookie
# CSRF_COOKIE_HTTPONLY = False    # 默认值False：控制 JavaScript 是否可通过 document.cookie 访问 CSRF Cookie
# SECURE_SSL_REDIRECT = True   # 非HTTPS的请求会自动重定向到HTTPS

INSTALLED_APPS = [
    'daphne',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    "app01.apps.App01Config",
    "channels",
    'django_redis',
    "corsheaders",  # 解决跨域问题 需先安装：pip install django-cors-headers
]

# 中间件
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',   # wss要用到
    'django.middleware.http.ConditionalGetMiddleware',  # wss要用到
    # 使用中文
    'django.middleware.locale.LocaleMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',  # 生成请求时的session
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'app01.middle.validate.AuthMiddleware',   # 自定义中间件,做登录验证或者以后增加权限检查用
    # 'app01.middle.middleware.CORSMiddleware',  # 确保路径指向你创建的CORSMiddleware,中间件处理跨域问题
    'corsheaders.middleware.CorsMiddleware',  # 都在settings.py里设置跨域问题

]

# 跨域白名单
# CORS_ORIGIN_WHITELIST = [
#     "http://localhost:8000",
#     "http://127.0.0.1:8000",
#     "http://139.155.127.236:8000",
#     "http://139.155.127.236:8080",
# ]
# 允许所有用户访问
CORS_ORIGIN_ALLOW_ALL = True
# 指明在跨域访问中，后端是否支持cookie的操作
CORS_ALLOW_CREDENTIALS = True

# 上边那些跨域都解决不了,加下边这个就可以了,具体原因以后再查资料
SECURE_CROSS_ORIGIN_OPENER_POLICY = None

# SESSION_COOKIE_SECURE = False

ROOT_URLCONF = 'iot.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],   # BASE_DIR / 'templates'             # 按照app注册顺序查找,没有再找根目录
        # 'DIRS': [os.path.join(BASE_DIR, 'templates')],   # 上线时才有效,先找根目录,没有再按照app注册顺序查找模版
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
            'builtins': ['django.templatetags.static'],  # 以后就不用在html里{% load static %}了
            'libraries': {
                'myfun': 'app01.templatetags.myfun',   # 自定义样式,一般给modelFrom自己产生的label加样式,还未调试成功
                'calc': 'app01.templatetags.calc',  # 自定义html模版加减运算
            }
        },
    },
]

WSGI_APPLICATION = 'iot.wsgi.application'
ASGI_APPLICATION = 'iot.asgi.application'


# 做为websocket队列发消息用(原来用的),后来redis配置在local_settings.py里了
# CHANNEL_LAYERS = {
#     'default': {
#         'BACKEND': 'channels.layers.InMemoryChannelLayer',  # 内存通道层，无需Redis
#     }
# }

# 连接数据库,没有使用连接池
# DATABASES = {
#     'default': {
#         'ENGINE': 'django.db.backends.mysql',
#         'NAME': 'iot',
#         'USER': 'iot_user',  # 上线以后换为:iot_user, 本地root
#         'PASSWORD': 'iot_user123456IOT_USER',  # 上线以后换为:iot_user123456IOT_USER,本地123456
#         'HOST': '139.155.127.236',  # 上线139.155.127.236 本地:127.0.0.1
#         'PORT': '3306',
#         'OPTIONS': {  # 使用mariadb需要设置options字段
#             'charset': 'utf8mb4',
#             'collation': 'utf8mb4_unicode_ci',
#         },
#     }
# }

# 如果要使用连接池,则需要先安装:pip install django-db-connection-pool (还支持其他数据库)
# 配置改为以下:
DATABASES = {
    'default': {
        'ENGINE': 'dj_db_conn_pool.backends.mysql',
        'NAME': 'iot',
        'USER': 'iot_user',  # 上线以后换为:iot_user, 本地root
        'PASSWORD': 'iot_user123456IOT_USER',  # 上线以后换为:iot_user123456IOT_USER,本地123456
        'HOST': '139.155.127.236',  # 上线139.155.127.236 本地:127.0.0.1
        'PORT': '3306',
        'OPTIONS': {
            'charset': 'utf8mb4',  # 使用mariadb需要设置options字段
            'collation': 'utf8mb4_unicode_ci',  # 使用mariadb需要设置options字段
        },
        'POOL_OPTIONS': {
            'pool_size': 10,  # 最小
            'max_overflow': 10,  # 在最小基础上,还可以增加10,即:最大20个
            'recycle': 24 * 60 * 60,  # 连接可以被重复用多久,超过会重新创建,-1表示永久
            'timeout': 30,  # 池中没有线程最多等待的时间.
        },
    },
}

AUTH_PASSWORD_VALIDATORS = [
    {'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', },
    {'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', },
    {'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', },
    {'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', },
]


# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'
# 修改时区:"UTC"修改为"Asia/Shanghai"
TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_TZ = True

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

# CRITICAL级别：不让控制台输出：日志信息，如警告、信息、错误等，都会被忽略，只有严重错误信息才会被处理
# LOGGING = {
#     'version': 1,
#     'disable_existing_loggers': False,
#     'handlers': {
#         'null': {
#             'level': 'CRITICAL',
#             'class': 'logging.NullHandler',
#         },
#     },
#     'root': {
#         'handlers': ['null'],
#         'propagate': False,
#     },
#     'django.server': {
#         'handlers': ['django.server'],
#         'level': 'INFO',
#         'propagate': False,
#     },
# }

# 'loggers': {
#     # django's default logger
# }

# 以下为自己设置的settings.py, 自己要到local_settings.py配置
# ########### 腾讯云短信sms  ##########################################
# ########### 登录白名单：无需登录就可以访问的页面 ########################
# ########### redis数据库配置文件,已配在local_settings.py中了 ###########

try:
    from .local_settings import *
except ImportError:
    pass
